--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/backend/test_config_manager.py v4.7.0-rc.4 (448cd46c) Text, 5.90 KB
T8b949e# SPDX-License-Identifier: 0BSD
Tff7b72import T7ee787os
Tff7b72import T7ee787tempfile
Tff7b72import T7ee787pytest
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787config_manager Tff7b72import Te6edf3ConfigManager
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787database Tff7b72import Te6edf3Database
Tf0883e@pytestTff7b72.Td2a8fffixture
Tff7b72def Td2a8ffdbTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3fdTb4b4b4, Te6edf3path Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkstempTb4b4b4(Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffcloseTb4b4b4(Te6edf3fdTb4b4b4)
Te6edf3database Tff7b72= Te6edf3DatabaseTb4b4b4(Te6edf3pathTb4b4b4)
Te6edf3databaseTff7b72.Td2a8ffinitializeTb4b4b4(Tb4b4b4)
Tff7b72yield Te6edf3database
Te6edf3databaseTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3pathTb4b4b4)
Tff7b72def Td2a8fftest_config_manager_get_defaultTb4b4b4(Te6edf3dbTb4b4b4)Tb4b4b4:
Te6edf3config Tff7b72= Te6edf3ConfigManagerTb4b4b4(Te6edf3dbTb4b4b4)
Tff7b72assert Te6edf3configTff7b72.Td2a8ffdisplay_nameTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffAnonymous PeerTa5d6ff"
Tff7b72assert Te6edf3configTff7b72.Td2a8ffthemeTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6fflightTa5d6ff"
Tff7b72assert Te6edf3configTff7b72.Td2a8fflxmf_inbound_stamp_costTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== T79c0ff8
Tff7b72def Td2a8fftest_config_manager_set_getTb4b4b4(Te6edf3dbTb4b4b4)Tb4b4b4:
Te6edf3config Tff7b72= Te6edf3ConfigManagerTb4b4b4(Te6edf3dbTb4b4b4)
Te6edf3configTff7b72.Td2a8ffdisplay_nameTff7b72.Td2a8ffsetTb4b4b4(Ta5d6ff"Ta5d6ffTest UserTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3configTff7b72.Td2a8ffdisplay_nameTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffTest UserTa5d6ff"
Te6edf3configTff7b72.Td2a8fflxmf_inbound_stamp_costTff7b72.Td2a8ffsetTb4b4b4(T79c0ff20Tb4b4b4)
Tff7b72assert Te6edf3configTff7b72.Td2a8fflxmf_inbound_stamp_costTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== T79c0ff20
Te6edf3configTff7b72.Td2a8fflxmf_inbound_stamp_costTff7b72.Td2a8ffsetTb4b4b4(T79c0ff0Tb4b4b4)
Tff7b72assert Te6edf3configTff7b72.Td2a8fflxmf_inbound_stamp_costTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== T79c0ff0
Te6edf3configTff7b72.Td2a8ffauto_announce_enabledTff7b72.Td2a8ffsetTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72assert Te6edf3configTff7b72.Td2a8ffauto_announce_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72def Td2a8fftest_config_manager_persistenceTb4b4b4(Te6edf3dbTb4b4b4)Tb4b4b4:
Te6edf3config Tff7b72= Te6edf3ConfigManagerTb4b4b4(Te6edf3dbTb4b4b4)
Te6edf3configTff7b72.Td2a8ffdisplay_nameTff7b72.Td2a8ffsetTb4b4b4(Ta5d6ff"Ta5d6ffPersistent UserTa5d6ff"Tb4b4b4)
T8b949e# New manager instance with same DB
Te6edf3config2 Tff7b72= Te6edf3ConfigManagerTb4b4b4(Te6edf3dbTb4b4b4)
Tff7b72assert Te6edf3config2Tff7b72.Td2a8ffdisplay_nameTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffPersistent UserTa5d6ff"
Tff7b72def Td2a8fftest_config_manager_type_safetyTb4b4b4(Te6edf3dbTb4b4b4)Tb4b4b4:
Te6edf3config Tff7b72= Te6edf3ConfigManagerTb4b4b4(Te6edf3dbTb4b4b4)
T8b949e# IntConfig
Te6edf3configTff7b72.Td2a8fflxmf_inbound_stamp_costTff7b72.Td2a8ffsetTb4b4b4(
Ta5d6ff"Ta5d6ff15Ta5d6ff"Tb4b4b4,
Tb4b4b4) T8b949e# Should handle string to int if implementation allows or just store it
T8b949e# Looking at implementation might be better, but let's test basic set/get
Te6edf3configTff7b72.Td2a8fflxmf_inbound_stamp_costTff7b72.Td2a8ffsetTb4b4b4(T79c0ff15Tb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3configTff7b72.Td2a8fflxmf_inbound_stamp_costTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4)Tb4b4b4, Tffa657intTb4b4b4)
Tff7b72assert Te6edf3configTff7b72.Td2a8fflxmf_inbound_stamp_costTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== T79c0ff15
T8b949e# BoolConfig
Te6edf3configTff7b72.Td2a8ffauto_announce_enabledTff7b72.Td2a8ffsetTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72assert Te6edf3configTff7b72.Td2a8ffauto_announce_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Te6edf3configTff7b72.Td2a8ffauto_announce_enabledTff7b72.Td2a8ffsetTb4b4b4(Tff7b72FalseTb4b4b4)
Tff7b72assert Te6edf3configTff7b72.Td2a8ffauto_announce_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72def Td2a8fftest_telephony_configTb4b4b4(Te6edf3dbTb4b4b4)Tb4b4b4:
Te6edf3config Tff7b72= Te6edf3ConfigManagerTb4b4b4(Te6edf3dbTb4b4b4)
T8b949e# Test DND
Tff7b72assert Te6edf3configTff7b72.Td2a8ffdo_not_disturb_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72False
Te6edf3configTff7b72.Td2a8ffdo_not_disturb_enabledTff7b72.Td2a8ffsetTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72assert Te6edf3configTff7b72.Td2a8ffdo_not_disturb_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
T8b949e# Test Contacts Only (defaults to True for security)
Tff7b72assert Te6edf3configTff7b72.Td2a8fftelephone_allow_calls_from_contacts_onlyTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Te6edf3configTff7b72.Td2a8fftelephone_allow_calls_from_contacts_onlyTff7b72.Td2a8ffsetTb4b4b4(Tff7b72FalseTb4b4b4)
Tff7b72assert Te6edf3configTff7b72.Td2a8fftelephone_allow_calls_from_contacts_onlyTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72False
T8b949e# Test Call Recording
Tff7b72assert Te6edf3configTff7b72.Td2a8ffcall_recording_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72False
Te6edf3configTff7b72.Td2a8ffcall_recording_enabledTff7b72.Td2a8ffsetTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72assert Te6edf3configTff7b72.Td2a8ffcall_recording_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
T8b949e# Test Telephone Enabled (defaults to True)
Tff7b72assert Te6edf3configTff7b72.Td2a8fftelephone_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Te6edf3configTff7b72.Td2a8fftelephone_enabledTff7b72.Td2a8ffsetTb4b4b4(Tff7b72FalseTb4b4b4)
Tff7b72assert Te6edf3configTff7b72.Td2a8fftelephone_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72def Td2a8fftest_all_telephony_settings_persistTb4b4b4(Te6edf3dbTb4b4b4)Tb4b4b4:
T8b949e"""Verify every telephone/call setting survives a manager reload (simulated restart)."""
Te6edf3config Tff7b72= Te6edf3ConfigManagerTb4b4b4(Te6edf3dbTb4b4b4)
T8b949e# Set all telephone-related settings
Te6edf3configTff7b72.Td2a8fftelephone_enabledTff7b72.Td2a8ffsetTb4b4b4(Tff7b72FalseTb4b4b4)
Te6edf3configTff7b72.Td2a8ffdo_not_disturb_enabledTff7b72.Td2a8ffsetTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3configTff7b72.Td2a8fftelephone_allow_calls_from_contacts_onlyTff7b72.Td2a8ffsetTb4b4b4(Tff7b72FalseTb4b4b4)
Te6edf3configTff7b72.Td2a8fftelephone_announce_enabledTff7b72.Td2a8ffsetTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3configTff7b72.Td2a8fftelephone_audio_profile_idTff7b72.Td2a8ffsetTb4b4b4(T79c0ff5Tb4b4b4)
Te6edf3configTff7b72.Td2a8fftelephone_web_audio_enabledTff7b72.Td2a8ffsetTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3configTff7b72.Td2a8fftelephone_web_audio_allow_fallbackTff7b72.Td2a8ffsetTb4b4b4(Tff7b72FalseTb4b4b4)
Te6edf3configTff7b72.Td2a8ffcall_recording_enabledTff7b72.Td2a8ffsetTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3configTff7b72.Td2a8fftelephone_tone_generator_enabledTff7b72.Td2a8ffsetTb4b4b4(Tff7b72FalseTb4b4b4)
Te6edf3configTff7b72.Td2a8fftelephone_tone_generator_volumeTff7b72.Td2a8ffsetTb4b4b4(T79c0ff80Tb4b4b4)
T8b949e# Voicemail settings
Te6edf3configTff7b72.Td2a8ffvoicemail_enabledTff7b72.Td2a8ffsetTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3configTff7b72.Td2a8ffvoicemail_auto_answer_delay_secondsTff7b72.Td2a8ffsetTb4b4b4(T79c0ff15Tb4b4b4)
Te6edf3configTff7b72.Td2a8ffvoicemail_max_recording_secondsTff7b72.Td2a8ffsetTb4b4b4(T79c0ff120Tb4b4b4)
Te6edf3configTff7b72.Td2a8ffvoicemail_tts_speedTff7b72.Td2a8ffsetTb4b4b4(T79c0ff150Tb4b4b4)
Te6edf3configTff7b72.Td2a8ffvoicemail_tts_pitchTff7b72.Td2a8ffsetTb4b4b4(T79c0ff50Tb4b4b4)
Te6edf3configTff7b72.Td2a8ffvoicemail_tts_word_gapTff7b72.Td2a8ffsetTb4b4b4(T79c0ff10Tb4b4b4)
Te6edf3configTff7b72.Td2a8ffvoicemail_tts_voiceTff7b72.Td2a8ffsetTb4b4b4(Ta5d6ff"Ta5d6ffde-de+f1Ta5d6ff"Tb4b4b4)
T8b949e# Ringtone settings
Te6edf3configTff7b72.Td2a8ffcustom_ringtone_enabledTff7b72.Td2a8ffsetTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3configTff7b72.Td2a8ffringtone_volumeTff7b72.Td2a8ffsetTb4b4b4(T79c0ff75Tb4b4b4)
Te6edf3configTff7b72.Td2a8ffringtone_preferred_idTff7b72.Td2a8ffsetTb4b4b4(T79c0ff3Tb4b4b4)
T8b949e# Desktop / misc
Te6edf3configTff7b72.Td2a8ffdesktop_open_calls_in_separate_windowTff7b72.Td2a8ffsetTb4b4b4(Tff7b72TrueTb4b4b4)
T8b949e# Simulate restart: new ConfigManager on same DB
Te6edf3config2 Tff7b72= Te6edf3ConfigManagerTb4b4b4(Te6edf3dbTb4b4b4)
T8b949e# Assert all values persisted
T8b949e# Telephone base
Tff7b72assert Te6edf3config2Tff7b72.Td2a8fftelephone_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72assert Te6edf3config2Tff7b72.Td2a8ffdo_not_disturb_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3config2Tff7b72.Td2a8fftelephone_allow_calls_from_contacts_onlyTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72assert Te6edf3config2Tff7b72.Td2a8fftelephone_announce_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3config2Tff7b72.Td2a8fftelephone_audio_profile_idTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== T79c0ff5
Tff7b72assert Te6edf3config2Tff7b72.Td2a8fftelephone_web_audio_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3config2Tff7b72.Td2a8fftelephone_web_audio_allow_fallbackTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72assert Te6edf3config2Tff7b72.Td2a8ffcall_recording_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3config2Tff7b72.Td2a8fftelephone_tone_generator_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72assert Te6edf3config2Tff7b72.Td2a8fftelephone_tone_generator_volumeTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== T79c0ff80
T8b949e# Voicemail
Tff7b72assert Te6edf3config2Tff7b72.Td2a8ffvoicemail_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3config2Tff7b72.Td2a8ffvoicemail_auto_answer_delay_secondsTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== T79c0ff15
Tff7b72assert Te6edf3config2Tff7b72.Td2a8ffvoicemail_max_recording_secondsTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== T79c0ff120
Tff7b72assert Te6edf3config2Tff7b72.Td2a8ffvoicemail_tts_speedTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== T79c0ff150
Tff7b72assert Te6edf3config2Tff7b72.Td2a8ffvoicemail_tts_pitchTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== T79c0ff50
Tff7b72assert Te6edf3config2Tff7b72.Td2a8ffvoicemail_tts_word_gapTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== T79c0ff10
Tff7b72assert Te6edf3config2Tff7b72.Td2a8ffvoicemail_tts_voiceTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffde-de+f1Ta5d6ff"
T8b949e# Ringtone
Tff7b72assert Te6edf3config2Tff7b72.Td2a8ffcustom_ringtone_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3config2Tff7b72.Td2a8ffringtone_volumeTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== T79c0ff75
Tff7b72assert Te6edf3config2Tff7b72.Td2a8ffringtone_preferred_idTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== T79c0ff3
T8b949e# Desktop
Tff7b72assert Te6edf3config2Tff7b72.Td2a8ffdesktop_open_calls_in_separate_windowTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72def Td2a8fftest_auto_propagation_configTb4b4b4(Te6edf3dbTb4b4b4)Tb4b4b4:
Te6edf3config Tff7b72= Te6edf3ConfigManagerTb4b4b4(Te6edf3dbTb4b4b4)
Tff7b72assert Te6edf3configTff7b72.Td2a8fflxmf_preferred_propagation_node_auto_selectTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72False
Te6edf3configTff7b72.Td2a8fflxmf_preferred_propagation_node_auto_selectTff7b72.Td2a8ffsetTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72assert Te6edf3configTff7b72.Td2a8fflxmf_preferred_propagation_node_auto_selectTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────